/**
 * 社区服务API
 * 提供社区宣教、云社区、云志愿、党群中心等相关接口
 * @author WeChat Mini Program Team
 * @since 2025-08-13
 */

const Request = require('./request');

class CommunityService {
  constructor() {
    this.service = 'community';
  }

  // ==================== 好人好事 ====================

  /**
   * 获取好人好事列表
   * @param {Object} params 查询参数
   * @param {number} params.page 页码
   * @param {number} params.limit 每页数量
   * @param {number} params.community_id 社区ID
   * @param {number} params.status 状态
   * @returns {Promise<Object>} 好人好事列表
   */
  async getGoodDeedsList(params = {}) {
    return Request.get('/community/good-deeds', params, {
      service: this.service
    });
  }

  /**
   * 获取好人好事详情
   * @param {number} id 好人好事ID
   * @returns {Promise<Object>} 好人好事详情
   */
  async getGoodDeedDetail(id) {
    return Request.get(`/community/good-deeds/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建好人好事
   * @param {Object} data 好人好事数据
   * @param {string} data.title 标题
   * @param {string} data.content 内容
   * @param {number} data.author_id 作者ID
   * @param {number} data.community_id 社区ID
   * @returns {Promise<Object>} 创建结果
   */
  async createGoodDeed(data) {
    return Request.post('/community/good-deeds', data, {
      service: this.service,
      showLoading: true,
      loadingText: '发布中...'
    });
  }

  /**
   * 更新好人好事
   * @param {number} id 好人好事ID
   * @param {Object} data 更新数据
   * @returns {Promise<Object>} 更新结果
   */
  async updateGoodDeed(id, data) {
    return Request.put(`/community/good-deeds/${id}`, data, {
      service: this.service,
      showLoading: true,
      loadingText: '更新中...'
    });
  }

  /**
   * 删除好人好事
   * @param {number} id 好人好事ID
   * @returns {Promise<Object>} 删除结果
   */
  async deleteGoodDeed(id) {
    return Request.delete(`/community/good-deeds/${id}`, {
      service: this.service,
      showLoading: true,
      loadingText: '删除中...'
    });
  }

  /**
   * 点赞好人好事
   * @param {Object} data 点赞数据
   * @param {number} data.good_deed_id 好人好事ID
   * @param {number} data.user_id 用户ID
   * @returns {Promise<Object>} 点赞结果
   */
  async praiseGoodDeed(data) {
    return Request.post('/community/good-deeds/praise', data, {
      service: this.service
    });
  }

  /**
   * 取消点赞好人好事
   * @param {number} goodDeedId 好人好事ID
   * @param {number} userId 用户ID
   * @returns {Promise<Object>} 取消点赞结果
   */
  async unpraiseGoodDeed(goodDeedId, userId) {
    return Request.delete(`/community/praise/good-deeds/${goodDeedId}/user/${userId}`, {
      service: this.service
    });
  }

  /**
   * 创建好人好事评论
   * @param {Object} data 评论数据
   * @param {number} data.good_deed_id 好人好事ID
   * @param {number} data.user_id 用户ID
   * @param {string} data.content 评论内容
   * @returns {Promise<Object>} 创建评论结果
   */
  async createGoodDeedComment(data) {
    return Request.post('/community/good-deeds/comments', data, {
      service: this.service,
      showLoading: true,
      loadingText: '评论中...'
    });
  }

  /**
   * 获取好人好事评论列表
   * @param {number} goodDeedId 好人好事ID
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 评论列表
   */
  async getGoodDeedComments(goodDeedId, params = {}) {
    return Request.get(`/community/comments/good-deeds/${goodDeedId}`, params, {
      service: this.service
    });
  }

  // ==================== 社区党建 ====================

  /**
   * 获取党建内容列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 党建内容列表
   */
  async getPartyBuildingList(params = {}) {
    return Request.get('/community/party-building', params, {
      service: this.service
    });
  }

  /**
   * 获取党建内容详情
   * @param {number} id 党建内容ID
   * @returns {Promise<Object>} 党建内容详情
   */
  async getPartyBuildingDetail(id) {
    return Request.get(`/community/party-building/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建党建内容
   * @param {Object} data 党建内容数据
   * @returns {Promise<Object>} 创建结果
   */
  async createPartyBuilding(data) {
    return Request.post('/community/party-building', data, {
      service: this.service,
      showLoading: true,
      loadingText: '发布中...'
    });
  }

  // ==================== 安全教育 ====================

  /**
   * 获取安全教育列表
   * @param {Object} params 查询参数
   * @param {string} params.category 分类
   * @returns {Promise<Object>} 安全教育列表
   */
  async getSafetyEducationList(params = {}) {
    return Request.get('/community/safety-educations', params, {
      service: this.service
    });
  }

  /**
   * 获取安全教育详情
   * @param {number} id 安全教育ID
   * @returns {Promise<Object>} 安全教育详情
   */
  async getSafetyEducationDetail(id) {
    return Request.get(`/community/safety-educations/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建安全教育内容
   * @param {Object} data 安全教育数据
   * @returns {Promise<Object>} 创建结果
   */
  async createSafetyEducation(data) {
    return Request.post('/community/safety-educations', data, {
      service: this.service,
      showLoading: true,
      loadingText: '发布中...'
    });
  }

  // ==================== 问卷调查 ====================

  /**
   * 获取问卷调查列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 问卷调查列表
   */
  async getSurveyList(params = {}) {
    return Request.get('/community/surveys', params, {
      service: this.service
    });
  }

  /**
   * 获取问卷调查详情
   * @param {number} id 问卷调查ID
   * @returns {Promise<Object>} 问卷调查详情
   */
  async getSurveyDetail(id) {
    return Request.get(`/community/surveys/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建问卷调查
   * @param {Object} data 问卷调查数据
   * @returns {Promise<Object>} 创建结果
   */
  async createSurvey(data) {
    return Request.post('/community/surveys', data, {
      service: this.service,
      showLoading: true,
      loadingText: '创建中...'
    });
  }

  /**
   * 提交问卷回答
   * @param {Object} data 问卷回答数据
   * @returns {Promise<Object>} 提交结果
   */
  async submitSurveyResponse(data) {
    return Request.post('/community/surveys/responses', data, {
      service: this.service,
      showLoading: true,
      loadingText: '提交中...'
    });
  }

  // ==================== 社区办事 ====================

  /**
   * 获取办事指南列表
   * @param {Object} params 查询参数
   * @param {string} params.category 分类
   * @returns {Promise<Object>} 办事指南列表
   */
  async getCommunityServicesList(params = {}) {
    return Request.get('/community/community-services', params, {
      service: this.service
    });
  }

  /**
   * 获取办事指南详情
   * @param {number} id 办事指南ID
   * @returns {Promise<Object>} 办事指南详情
   */
  async getCommunityServiceDetail(id) {
    return Request.get(`/community/community-services/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建办事指南
   * @param {Object} data 办事指南数据
   * @returns {Promise<Object>} 创建结果
   */
  async createCommunityService(data) {
    return Request.post('/community/community-services', data, {
      service: this.service,
      showLoading: true,
      loadingText: '创建中...'
    });
  }

  // ==================== 常用热线 ====================

  /**
   * 获取热线列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 热线列表
   */
  async getHotlinesList(params = {}) {
    return Request.get('/community/community-hotlines', params, {
      service: this.service
    });
  }

  /**
   * 获取热线详情
   * @param {number} id 热线ID
   * @returns {Promise<Object>} 热线详情
   */
  async getHotlineDetail(id) {
    return Request.get(`/community/community-hotlines/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建热线
   * @param {Object} data 热线数据
   * @returns {Promise<Object>} 创建结果
   */
  async createHotline(data) {
    return Request.post('/community/community-hotlines', data, {
      service: this.service,
      showLoading: true,
      loadingText: '创建中...'
    });
  }

  // ==================== 社会援助 ====================

  /**
   * 获取社会援助列表
   * @param {Object} params 查询参数
   * @param {string} params.type 援助类型
   * @returns {Promise<Object>} 社会援助列表
   */
  async getSocialAssistanceList(params = {}) {
    return Request.get('/community/social-assistances', params, {
      service: this.service
    });
  }

  /**
   * 获取社会援助详情
   * @param {number} id 社会援助ID
   * @returns {Promise<Object>} 社会援助详情
   */
  async getSocialAssistanceDetail(id) {
    return Request.get(`/community/social-assistances/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建社会援助
   * @param {Object} data 社会援助数据
   * @returns {Promise<Object>} 创建结果
   */
  async createSocialAssistance(data) {
    return Request.post('/community/social-assistances', data, {
      service: this.service,
      showLoading: true,
      loadingText: '创建中...'
    });
  }

  /**
   * 申请社会援助
   * @param {Object} data 申请数据
   * @returns {Promise<Object>} 申请结果
   */
  async applySocialAssistance(data) {
    return Request.post('/community/social-assistances/applications', data, {
      service: this.service,
      showLoading: true,
      loadingText: '申请中...'
    });
  }

  // ==================== 微志愿 ====================

  /**
   * 获取志愿者征集列表
   * @param {Object} params 查询参数
   * @returns {Promise<Object>} 志愿者征集列表
   */
  async getMicroVolunteerList(params = {}) {
    return Request.get('/community/micro-volunteers', params, {
      service: this.service
    });
  }

  /**
   * 获取志愿者征集详情
   * @param {number} id 志愿者征集ID
   * @returns {Promise<Object>} 志愿者征集详情
   */
  async getMicroVolunteerDetail(id) {
    return Request.get(`/community/micro-volunteers/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建志愿者征集
   * @param {Object} data 志愿者征集数据
   * @returns {Promise<Object>} 创建结果
   */
  async createMicroVolunteer(data) {
    return Request.post('/community/micro-volunteers', data, {
      service: this.service,
      showLoading: true,
      loadingText: '发布中...'
    });
  }

  /**
   * 报名志愿活动
   * @param {Object} data 报名数据
   * @returns {Promise<Object>} 报名结果
   */
  async joinMicroVolunteer(data) {
    return Request.post('/community/micro-volunteers/join', data, {
      service: this.service,
      showLoading: true,
      loadingText: '报名中...'
    });
  }

  // ==================== 活动记录 ====================

  /**
   * 获取活动记录列表
   * @param {Object} params 查询参数
   * @param {number} params.volunteer_id 志愿者ID
   * @returns {Promise<Object>} 活动记录列表
   */
  async getActivityRecordsList(params = {}) {
    return Request.get('/community/activity-records', params, {
      service: this.service
    });
  }

  /**
   * 获取活动记录详情
   * @param {number} id 活动记录ID
   * @returns {Promise<Object>} 活动记录详情
   */
  async getActivityRecordDetail(id) {
    return Request.get(`/community/activity-records/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建活动记录
   * @param {Object} data 活动记录数据
   * @returns {Promise<Object>} 创建结果
   */
  async createActivityRecord(data) {
    return Request.post('/community/activity-records', data, {
      service: this.service,
      showLoading: true,
      loadingText: '创建中...'
    });
  }

  /**
   * 获取志愿者积分统计
   * @param {number} volunteerId 志愿者ID
   * @returns {Promise<Object>} 积分统计
   */
  async getVolunteerPoints(volunteerId) {
    return Request.get(`/community/volunteer-points/${volunteerId}`, {}, {
      service: this.service
    });
  }

  // ==================== 党员报到 ====================

  /**
   * 获取党员报到列表
   * @param {Object} params 查询参数
   * @param {string} params.party_branch 党支部
   * @param {string} params.name 姓名
   * @returns {Promise<Object>} 党员报到列表
   */
  async getPartyMembersList(params = {}) {
    return Request.get('/community/party-members', params, {
      service: this.service
    });
  }

  /**
   * 获取党员报到详情
   * @param {number} id 党员报到ID
   * @returns {Promise<Object>} 党员报到详情
   */
  async getPartyMemberDetail(id) {
    return Request.get(`/community/party-members/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建党员报到
   * @param {Object} data 党员报到数据
   * @returns {Promise<Object>} 创建结果
   */
  async createPartyMember(data) {
    return Request.post('/community/party-members', data, {
      service: this.service,
      showLoading: true,
      loadingText: '报到中...'
    });
  }

  // ==================== 红色物业 ====================

  /**
   * 获取红色物业列表
   * @param {Object} params 查询参数
   * @param {string} params.community_name 社区名称
   * @returns {Promise<Object>} 红色物业列表
   */
  async getRedPropertiesList(params = {}) {
    return Request.get('/community/red-properties', params, {
      service: this.service
    });
  }

  /**
   * 获取红色物业详情
   * @param {number} id 红色物业ID
   * @returns {Promise<Object>} 红色物业详情
   */
  async getRedPropertyDetail(id) {
    return Request.get(`/community/red-properties/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建红色物业
   * @param {Object} data 红色物业数据
   * @returns {Promise<Object>} 创建结果
   */
  async createRedProperty(data) {
    return Request.post('/community/red-properties', data, {
      service: this.service,
      showLoading: true,
      loadingText: '创建中...'
    });
  }

  // ==================== 组织生活 ====================

  /**
   * 获取组织生活列表
   * @param {Object} params 查询参数
   * @param {string} params.type 活动类型
   * @returns {Promise<Object>} 组织生活列表
   */
  async getOrganizationLifesList(params = {}) {
    return Request.get('/community/organization-lifes', params, {
      service: this.service
    });
  }

  /**
   * 获取组织生活详情
   * @param {number} id 组织生活ID
   * @returns {Promise<Object>} 组织生活详情
   */
  async getOrganizationLifeDetail(id) {
    return Request.get(`/community/organization-lifes/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建组织生活
   * @param {Object} data 组织生活数据
   * @returns {Promise<Object>} 创建结果
   */
  async createOrganizationLife(data) {
    return Request.post('/community/organization-lifes', data, {
      service: this.service,
      showLoading: true,
      loadingText: '创建中...'
    });
  }

  // ==================== 退役军人服务 ====================

  /**
   * 获取退役军人服务列表
   * @param {Object} params 查询参数
   * @param {string} params.service_type 服务类型
   * @returns {Promise<Object>} 退役军人服务列表
   */
  async getVeteranServicesList(params = {}) {
    return Request.get('/community/veteran-services', params, {
      service: this.service
    });
  }

  /**
   * 获取退役军人服务详情
   * @param {number} id 退役军人服务ID
   * @returns {Promise<Object>} 退役军人服务详情
   */
  async getVeteranServiceDetail(id) {
    return Request.get(`/community/veteran-services/${id}`, {}, {
      service: this.service
    });
  }

  /**
   * 创建退役军人服务
   * @param {Object} data 退役军人服务数据
   * @returns {Promise<Object>} 创建结果
   */
  async createVeteranService(data) {
    return Request.post('/community/veteran-services', data, {
      service: this.service,
      showLoading: true,
      loadingText: '创建中...'
    });
  }

  /**
   * 申请退役军人服务
   * @param {Object} data 申请数据
   * @returns {Promise<Object>} 申请结果
   */
  async applyVeteranService(data) {
    return Request.post('/community/veteran-services/applications', data, {
      service: this.service,
      showLoading: true,
      loadingText: '申请中...'
    });
  }
}

module.exports = new CommunityService();
